(*******************************************************************************
   Modulo: Materia
   Descripcion: programa que carga los datos del archivo de texto de las materias 
   en un arreglo.
   Autor: Jesús Reyes
   Fecha: 29/05/2012
 *******************************************************************************)

IMPLEMENTATION MODULE Tad_Materia;

FROM libc IMPORT exit, printf;
FROM MathLib0 IMPORT sqrt;
FROM FpuIO IMPORT WriteReal;
FROM StrIO IMPORT WriteString, WriteLn;
FROM Scan IMPORT OpenSource;
FROM NumberIO IMPORT ReadInt,WriteInt;
FROM FIO IMPORT OpenToRead,File,EOF,ReadString;
FROM DynamicStrings IMPORT String, Slice, CopyOut, Index, InitString;
FROM StringConvert IMPORT StringToInteger;
FROM Storage IMPORT ALLOCATE, DEALLOCATE;

TYPE Materia = POINTER TO Mat;


TYPE Mat = RECORD
      codigo: INTEGER;
      nombre: String;
      creditos: INTEGER;
    END;

PROCEDURE Nuevo (codigo:INTEGER; nombre:String; creditos:INTEGER):Materia;
VAR asignatura:Materia;
BEGIN
        NEW(asignatura);
        IF (asignatura = NIL) THEN
      RETURN NIL;
    END;
    asignatura^.codigo := codigo;
    asignatura^.nombre := nombre;
    asignatura^.creditos := creditos;
    RETURN asignatura;

END Nuevo;


PROCEDURE AsigCodigo (VAR asignatura: Materia; codigo: INTEGER);

BEGIN

  asignatura^.codigo := codigo;
  
END AsigCodigo;

PROCEDURE AsigNombre (VAR asignatura: Materia; nombre: String);

BEGIN

  asignatura^.nombre := nombre;
  
END AsigNombre;

PROCEDURE AsigCreditos (VAR asignatura: Materia; creditos: INTEGER);

BEGIN

  asignatura^.creditos := creditos;
  
END AsigCreditos;

PROCEDURE GetCodigo (asignatura: Materia) : INTEGER;
VAR x : INTEGER;

BEGIN

  x := asignatura^.codigo;

  RETURN x;
  
END GetCodigo;

PROCEDURE GetNombre (asignatura: Materia) : String;
VAR x: String;

BEGIN

  x := asignatura^.nombre;

  RETURN x;
  
  
END GetNombre;

PROCEDURE GetCreditos (asignatura: Materia) : INTEGER;
VAR x: INTEGER;

BEGIN

  x := asignatura^.creditos;
  
  RETURN x;
  
END GetCreditos;

PROCEDURE Carga(data:File) : Materia;
VAR valido: BOOLEAN;
VAR string,nombre: String;
VAR linea : ARRAY [0..200] OF CHAR;
VAR inic,fin,i : CARDINAL;
VAR asignatura: Materia;
VAR codigo, creditos : INTEGER;
	
BEGIN
	
	valido := TRUE;
	inic := 0;
	ReadString(data, linea);
	string := InitString(linea);
	fin := Index(string,":",inic);
	codigo := StringToInteger(Slice(string,inic,fin),10,valido);
	inic := fin + 1;
	fin := Index(string,":",inic);
	nombre := Slice(string,inic,fin);
	inic := fin + 1;
	fin := 0;
	creditos := StringToInteger(Slice(string,inic,fin),10,valido);
	asignatura := Nuevo(codigo,nombre,creditos);
	RETURN asignatura;
	
 END Carga;

PROCEDURE Imprimir(asignatura: Materia);
VAR x : ARRAY [0..19] OF CHAR;
BEGIN
	WriteString('(');
	WriteString('Codigo:');
	WriteInt(GetCodigo(asignatura),0);
	WriteString(',Nombre:');
	CopyOut(x,GetNombre(asignatura));
	WriteString(x);
	WriteString(',Creditos:');
	WriteInt(GetCreditos(asignatura),0);
	WriteString(')');
END Imprimir;
 
PROCEDURE ImprimirNombre(asignatura: Materia);
VAR x: ARRAY [0..19] OF CHAR;
BEGIN
	CopyOut(x,GetNombre(asignatura));
	WriteString(x);
END ImprimirNombre; 

END Tad_Materia.



